package com.quartz;
import lombok.extern.slf4j.Slf4j;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Trigger;
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import javax.sql.DataSource;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
/**
* Created by wuhuachuan on 16/6/11.
*
* 该类主要用于集群版本
*/
@Slf4j
@Configuration
public class SchedulerJobCluster {
private final static String CRON_EXPRESSION = "*/5 * * * * ?";
@Bean
public JobDetailFactoryBean createJobDetail(){
JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();jobDetailFactoryBean.setName("myJobName");
jobDetailFactoryBean.setGroup("myJobGroup");
jobDetailFactoryBean.setJobClass(MyJob.class);
return jobDetailFactoryBean;
}
@Bean
protected CronTriggerFactoryBean createTrigger(JobDetail jobDetail) {
CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();
cronTriggerFactoryBean.setName("myTriggerName");
cronTriggerFactoryBean.setGroup("myTriggerGroup");
cronTriggerFactoryBean.setCronExpression(CRON_EXPRESSION);
cronTriggerFactoryBean.setJobDetail(jobDetail);
cronTriggerFactoryBean.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY);
return cronTriggerFactoryBean;
}
@Bean
public SchedulerFactoryBean schedulerFactoryBean(List<Trigger> triggers, DataSource dataSource){
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setTriggers(triggers.toArray(new Trigger[0]));
schedulerFactoryBean.setQuartzProperties(quartzProperties());
schedulerFactoryBean.setDataSource(dataSource);
return schedulerFactoryBean;
}
private Properties quartzProperties(){
PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
propertiesFactoryBean.setLocation(new ClassPathResource("/quartz.properties"));
try {
propertiesFactoryBean.afterPropertiesSet();
return propertiesFactoryBean.getObject();
} catch (IOException e) {
log.error("read quartz.properties file error: {}", e.getMessage());
}
return null;
}
}